rememberChild() メソッドは super を呼び出す必要があります
まとめ
最近のグローバル キー重複検出リファクタリングでは、次のことが必要になりました。Element
をオーバーライドするサブクラスforgetChild()
電話するsuper()
。
コンテクスト
グローバルキーの重複が発生した場合、 後で要素を再構築することでクリーンアップされます。 グローバルキーの重複を報告してはなりません。 以前の実装では、すぐにエラーがスローされました。 重複が検出され、再構築を待機しなかった場合、 重複したグローバル キーを持つ要素は再構築されます。
新しい実装では、すべてのグローバルな情報が追跡されます。
ビルドサイクル中のキーの重複を防ぎ、グローバルのみを検証します。
そのサイクルの終わりに、代わりにキーを複製します。
すぐにエラーをスローします。リファクタリングの一環として、
以前のグローバルキーを削除するメカニズムを実装しました
での重複forgetChild
再構築が行われていたら。
ただし、これにはすべてが必要ですElement
サブクラス
オーバーライドforgetChild
に電話するsuper
方法。
変更内容の説明
のforgetChild
抽象クラスのElement
基地がある
グローバルキー予約を削除する実装、
そしてそれはによって施行されます@mustCallSuper
メタタグ。
メソッドをオーバーライドするすべてのサブクラスは呼び出す必要があります。super
;
それ以外の場合、アナライザーは lint エラーを表示し、
グローバル キーの重複を検出すると、予期しないエラーが発生する可能性があります。
移行ガイド
次の例では、アプリのElement
サブクラスはforgetChild
方法。
移行前のコード:
class CustomElement extends Element {
@override
void forgetChild(Element child) {
...
}
}
移行後のコード:
class CustomElement extends Element {
@override
void forgetChild(Element child) {
...
super.forgetChild(child);
}
}
タイムライン
リリースされたバージョン: 1.16.3
安定版リリース: 1.17
参考文献
API ドキュメント:
Element
forgetChild()
関連する問題:
- 問題 43780
関連する PR:
- PR 43790:グローバル キー エラーを修正